/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mybeans;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
/**
 *
 * @author avbravo
 */
public class CierreMorosidadMensualAnualBeans {

    static int Anio;
    static String Mes;
    static private String Id;
    static String TipoId;
    static String IdRegimen;
    static double Morosidad = 0.0;
    static String IdMunicipio;
    static String IdUsuario;
    static Date Fecha;
    String sql;
    CierreMensualBeans cierreMensualBeans;
    ContribuyentesMorosidadAnualSQL contribuyentesMorosidadAnualSQL;
    ComerciosMorosidadAnualSQL comerciosMorosidadAnualSQL;
    RemolquesMorosidadAnualSQL remolquesMorosidadAnualSQL;
    VehiculosMorosidadAnualSQL vehiculosMorosidadAnualSQL;
    Sesion sesion;
    static private int NumeroRegistrosLista = -1;
    static List<String> ListaId = new ArrayList<String>();
    static List<String> ListaTipoId = new ArrayList<String>();
    static List<String> ListaIdRegimen = new ArrayList<String>();
    static List<String> ListaRegimen = new ArrayList<String>();
    static List<Double> ListaMorosidad = new ArrayList<Double>();
    private int tmpNumeroRegistrosLista = -1;
    List<String> tmpListaId = new ArrayList<String>();
    List<String> tmpListaTipoId = new ArrayList<String>();
    List<String> tmpListaIdRegimen = new ArrayList<String>();
    List<String> tmpListaRegimen = new ArrayList<String>();
    List<Double> tmpListaMorosidad = new ArrayList<Double>();
    List<String> tmpMoroso = new ArrayList<String>();

    public List<String> getTmpListaId() {
        return tmpListaId;
    }

    public void setTmpListaId(List<String> tmpListaId) {
        this.tmpListaId = tmpListaId;
    }

    public List<String> getTmpListaIdRegimen() {
        return tmpListaIdRegimen;
    }

    public void setTmpListaIdRegimen(List<String> tmpListaIdRegimen) {
        this.tmpListaIdRegimen = tmpListaIdRegimen;
    }

    public List<Double> getTmpListaMorosidad() {
        return tmpListaMorosidad;
    }

    public void setTmpListaMorosidad(List<Double> tmpListaMorosidad) {
        this.tmpListaMorosidad = tmpListaMorosidad;
    }

    public List<String> getTmpListaRegimen() {
        return tmpListaRegimen;
    }

    public void setTmpListaRegimen(List<String> tmpListaRegimen) {
        this.tmpListaRegimen = tmpListaRegimen;
    }

    public List<String> getTmpListaTipoId() {
        return tmpListaTipoId;
    }

    public void setTmpListaTipoId(List<String> tmpListaTipoId) {
        this.tmpListaTipoId = tmpListaTipoId;
    }

    public List<String> getTmpMoroso() {
        return tmpMoroso;
    }

    public void setTmpMoroso(List<String> tmpMoroso) {
        this.tmpMoroso = tmpMoroso;
    }

    public int getTmpNumeroRegistrosLista() {
        return tmpNumeroRegistrosLista;
    }

    public void setTmpNumeroRegistrosLista(int tmpNumeroRegistrosLista) {
        this.tmpNumeroRegistrosLista = tmpNumeroRegistrosLista;
    }

    public static List<Double> getListaMorosidad() {
        return ListaMorosidad;
    }

    public static void setListaMorosidad(List<Double> ListaMorosidad) {
        CierreMorosidadMensualAnualBeans.ListaMorosidad = ListaMorosidad;
    }

    public static double getMorosidad() {
        return Morosidad;
    }

    public static void setMorosidad(double Morosidad) {
        CierreMorosidadMensualAnualBeans.Morosidad = Morosidad;
    }

    public static String getMes() {
        return Mes;
    }

    public static void setMes(String Mes) {
        CierreMorosidadMensualAnualBeans.Mes = Mes.toLowerCase();
    }

    public static int getAnio() {
        return Anio;
    }

    public static void setAnio(int Anio) {
        CierreMorosidadMensualAnualBeans.Anio = Anio;
    }

    public static Date getFecha() {
        return Fecha;
    }

    public static void setFecha(Date Fecha) {
        CierreMorosidadMensualAnualBeans.Fecha = Fecha;
    }

    public static String getId() {
        return Id;
    }

    public static void setId(String Id) {
        CierreMorosidadMensualAnualBeans.Id = Id;
    }

    public static String getIdMunicipio() {
        return IdMunicipio;
    }

    public static void setIdMunicipio(String IdMunicipio) {
        CierreMorosidadMensualAnualBeans.IdMunicipio = IdMunicipio;
    }

    public static String getIdRegimen() {
        return IdRegimen;
    }

    public static void setIdRegimen(String IdRegimen) {
        CierreMorosidadMensualAnualBeans.IdRegimen = IdRegimen;
    }

    public static String getIdUsuario() {
        return IdUsuario;
    }

    public static void setIdUsuario(String IdUsuario) {
        CierreMorosidadMensualAnualBeans.IdUsuario = IdUsuario;
    }

    public static String getTipoId() {
        return TipoId;
    }

    public static void setTipoId(String TipoId) {
        CierreMorosidadMensualAnualBeans.TipoId = TipoId;
    }

    public static List<String> getListaId() {
        return ListaId;
    }

    public static void setListaId(List<String> ListaId) {
        CierreMorosidadMensualAnualBeans.ListaId = ListaId;
    }

    public static List<String> getListaIdRegimen() {
        return ListaIdRegimen;
    }

    public static void setListaIdRegimen(List<String> ListaIdRegimen) {
        CierreMorosidadMensualAnualBeans.ListaIdRegimen = ListaIdRegimen;
    }

    public static List<String> getListaRegimen() {
        return ListaRegimen;
    }

    public static void setListaRegimen(List<String> ListaRegimen) {
        CierreMorosidadMensualAnualBeans.ListaRegimen = ListaRegimen;
    }

    public static List<String> getListaTipoId() {
        return ListaTipoId;
    }

    public static void setListaTipoId(List<String> ListaTipoId) {
        CierreMorosidadMensualAnualBeans.ListaTipoId = ListaTipoId;
    }

    public static int getNumeroRegistrosLista() {
        return NumeroRegistrosLista;
    }

    public static void setNumeroRegistrosLista(int NumeroRegistrosLista) {
        CierreMorosidadMensualAnualBeans.NumeroRegistrosLista = NumeroRegistrosLista;
    }

    public CierreMorosidadMensualAnualBeans() {
        sesion = new Sesion();
        cierreMensualBeans = new CierreMensualBeans();
        contribuyentesMorosidadAnualSQL = new ContribuyentesMorosidadAnualSQL();
        comerciosMorosidadAnualSQL = new ComerciosMorosidadAnualSQL();
        remolquesMorosidadAnualSQL = new RemolquesMorosidadAnualSQL();
        vehiculosMorosidadAnualSQL = new VehiculosMorosidadAnualSQL();
    }


    /*
     * 
     *Carga la informacion de morosidad en las listas 
     * 
     */
    public boolean CargarListadoMorosidadMensualAnualCierre(String sql) {
        try {
            NumeroRegistrosLista = -1;
            RemoverElementosLista();

            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = sql;
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();
            if (x == 0) {
//                JOptionPane.showMessageDialog(null, "No existen registros de contribuyentes con esa cedula", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
            ListaId.add(rs.getString("id"));
            ListaTipoId.add(rs.getString("tipoid"));
            ListaIdRegimen.add(rs.getString("idregimen"));
            ListaRegimen.add(rs.getString("regimen"));
            ListaMorosidad.add(rs.getDouble("morosidad"));


            NumeroRegistrosLista++;
            while (rs.next()) {
                ListaId.add(rs.getString("id"));
                ListaTipoId.add(rs.getString("tipoid"));
                ListaIdRegimen.add(rs.getString("idregimen"));
                ListaRegimen.add(rs.getString("regimen"));
                ListaMorosidad.add(rs.getDouble("morosidad"));


                NumeroRegistrosLista++;
            }
            sesion.con.close();
            return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "CargarListadoMorosidadMensualCierre()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);

        }
        return false;
    }

    public void RemoverElementosLista() {
        ListaId.removeAll(ListaId);
        ListaTipoId.removeAll(ListaTipoId);
        ListaIdRegimen.removeAll(ListaIdRegimen);
        ListaRegimen.removeAll(ListaRegimen);
        ListaMorosidad.removeAll(ListaMorosidad);


    }

    private void RemoverElementosListaTemporal() {
        tmpListaId.removeAll(tmpListaId);
        tmpListaTipoId.removeAll(tmpListaTipoId);
        tmpListaIdRegimen.removeAll(tmpListaIdRegimen);
        tmpListaRegimen.removeAll(tmpListaRegimen);
        tmpListaMorosidad.removeAll(tmpListaMorosidad);
        tmpMoroso.removeAll(tmpMoroso);

    }

    public void CargarListadoSinPagoAnualImpuestos() {
        try {
            tmpNumeroRegistrosLista = -1;
            RemoverElementosListaTemporal();
            NumeroRegistrosLista = -1;
            RemoverElementosLista();
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            this.Mes = this.Mes.toLowerCase();
            this.Mes = this.Mes.trim();
            /*
             *
             * Verificamos si ya se cerro ese mes.
             *    si es asi se debe tomar en cuenta el mes actual
             * si no se ha cerrado, no se debe tomar en cuenta el mes actual
             *
             */
            sql = "";
            Contribuyentes();
            sql = sql.trim();
            if (sql.equals("")) {
            } else {
                CargarTemporalListas("contribuyentes");
                // CargarListadoMorosidadMensualAnualActualizado(sql);
            }

            sql = "";
            Comercios();
            sql = sql.trim();
            if (sql.equals("")) {
            } else {
                CargarTemporalListas("comercios");
                // CargarListadoMorosidadMensualAnualActualizado(sql);
            }

            sql = "";
            Remolques();
            sql = sql.trim();
            if (sql.equals("")) {
            } else {
                CargarTemporalListas("remolques");
                // CargarListadoMorosidadMensualAnualActualizado(sql);
            }


            sql = "";
            Vehiculos();
            sql = sql.trim();
            if (sql.equals("")) {
            } else {
                CargarTemporalListas("vehiculos");
                // CargarListadoMorosidadMensualAnualActualizado(sql);
            }



        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "CargarListadoSinPagoAnualImpuestos()\nError " + ex.getMessage(), "PagosAnualesBeans.VerificarPagoMensual()", JOptionPane.ERROR_MESSAGE);
        }

    }

    @SuppressWarnings("static-access")
    private void Contribuyentes() {
        try {
            contribuyentesMorosidadAnualSQL.setSql("");
            contribuyentesMorosidadAnualSQL.setMes(Mes);
            contribuyentesMorosidadAnualSQL.setIdMunicipio(this.IdMunicipio);
            contribuyentesMorosidadAnualSQL.setAnio(Anio);
            if (cierreMensualBeans.VerificarExiste(Anio, Mes)) {
                this.sql = contribuyentesMorosidadAnualSQL.ContribuyentesMesCerrado();
            } else {
                this.sql = contribuyentesMorosidadAnualSQL.ContribuyentesMesSinCerrar();

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Contribuyentes()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    @SuppressWarnings("static-access")
    private void Comercios() {
        try {
            comerciosMorosidadAnualSQL.setSql("");
            comerciosMorosidadAnualSQL.setMes(Mes);
            comerciosMorosidadAnualSQL.setIdMunicipio(this.IdMunicipio);
            comerciosMorosidadAnualSQL.setAnio(Anio);
            if (cierreMensualBeans.VerificarExiste(Anio, Mes)) {
                this.sql = comerciosMorosidadAnualSQL.ComerciosMesCerrado();
            } else {
                this.sql = comerciosMorosidadAnualSQL.ComerciosMesSinCerrar();

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Comercios()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    @SuppressWarnings("static-access")
    private void Vehiculos() {
        try {
            vehiculosMorosidadAnualSQL.setSql("");
            vehiculosMorosidadAnualSQL.setMes(Mes);
            vehiculosMorosidadAnualSQL.setIdMunicipio(this.IdMunicipio);
            vehiculosMorosidadAnualSQL.setAnio(Anio);
            if (cierreMensualBeans.VerificarExiste(Anio, Mes)) {
                this.sql = vehiculosMorosidadAnualSQL.VehiculosMesCerrado();
            } else {
                this.sql = vehiculosMorosidadAnualSQL.VehiculosMesSinCerrar();

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Vehiculos()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    @SuppressWarnings("static-access")
    private void Remolques() {
        try {
            remolquesMorosidadAnualSQL.setSql("");
            remolquesMorosidadAnualSQL.setMes(Mes);
            remolquesMorosidadAnualSQL.setIdMunicipio(this.IdMunicipio);
            remolquesMorosidadAnualSQL.setAnio(Anio);
            if (cierreMensualBeans.VerificarExiste(Anio, Mes)) {
                this.sql = remolquesMorosidadAnualSQL.RemolquesMesCerrado();
            } else {
                this.sql = remolquesMorosidadAnualSQL.RemolquesMesSinCerrar();

            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Remolques()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    public boolean CargarTemporalListas(String lTipoId) {
        try {


            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = sql;
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();
            if (x == 0) {

                sesion.con.close();
                return false;
            }
            lTipoId = lTipoId.toLowerCase();
            if (lTipoId.equals("contribuyentes")) {
                tmpListaId.add(rs.getString("cedula"));

            } else {
                if (lTipoId.equals("comercios")) {
                    tmpListaId.add(rs.getString("idcomercio"));

                } else {
                    if (lTipoId.equals("remolques")) {
                        tmpListaId.add(rs.getString("idremolque"));

                    } else {
                        if (lTipoId.equals("vehiculos")) {
                            tmpListaId.add(rs.getString("idvehiculo"));

                        }
                    }
                }
            }

            tmpListaTipoId.add(lTipoId);
            tmpListaIdRegimen.add(rs.getString("idregimen"));
            tmpListaRegimen.add(rs.getString("regimen"));
            tmpListaMorosidad.add(rs.getDouble("valor"));
            tmpMoroso.add("no");

            tmpNumeroRegistrosLista++;
            while (rs.next()) {
                if (lTipoId.equals("contribuyentes")) {
                    tmpListaId.add(rs.getString("cedula"));

                } else {
                    if (lTipoId.equals("comercios")) {
                        tmpListaId.add(rs.getString("idcomercio"));

                    } else {
                        if (lTipoId.equals("remolques")) {
                            tmpListaId.add(rs.getString("idremolque"));

                        } else {
                            if (lTipoId.equals("vehiculos")) {
                                tmpListaId.add(rs.getString("idvehiculo"));

                            }
                        }
                    }
                }

                tmpListaTipoId.add(lTipoId);
                tmpListaIdRegimen.add(rs.getString("idregimen"));
                tmpListaRegimen.add(rs.getString("regimen"));
                tmpListaMorosidad.add(rs.getDouble("valor"));
                tmpMoroso.add("no");

                tmpNumeroRegistrosLista++;
            }
            sesion.con.close();
            BuscarMorosidad();
            CargarListadoMorosidadMensualAnualActualizado(sql);
            return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "CargarTemporalListas()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);

        }
        return false;
    }

    private void BuscarMorosidad() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            String sqlQuery = "";
            PreparedStatement psquery;

            if (getTmpNumeroRegistrosLista() != - 1) {

                for (int i = 0; i <= getTmpNumeroRegistrosLista(); i++) {


                    String sql2 = "select pagosanuales.* from pagosanuales "
                            + " where pagosanuales.idmunicipio ='" + this.IdMunicipio + "'"
                            + " and pagosanuales.activo='si'"
                            + " and pagosanuales.pagado='no'"
                            + " and pagosanuales.id = '" + getTmpListaId().get(i) + "'"
                            + " and pagosanuales.tipoid='" + getTmpListaTipoId().get(i) + "'"
                            + " and pagosanuales.idregimen='" + getTmpListaIdRegimen().get(i) + "'";


                    psquery = sesion.con.prepareStatement(sql2);
                    ResultSet rs = psquery.executeQuery();
                    rs.next();
                    int x = rs.getRow();
                    if (x != 0) {
                        //encontro que no se habia pagado
                        tmpMoroso.set(i, "si");
                    } else {
                        tmpMoroso.set(i, "no");
                    }

                }//for
                sesion.con.close();
            }//if
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "BuscarMorosidad()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);

        }
    }

    public void CargarListadoMorosidadMensualAnualActualizado(String sql) {
        try {
            if (getTmpNumeroRegistrosLista() != - 1) {

                for (int i = 0; i <= getTmpNumeroRegistrosLista(); i++) {
                    if (tmpMoroso.get(i).equals("si")) {
                        ListaId.add(tmpListaId.get(i));
                        ListaTipoId.add(tmpListaTipoId.get(i));
                        ListaIdRegimen.add(tmpListaIdRegimen.get(i));
                        ListaRegimen.add(tmpListaRegimen.get(i));
                        ListaMorosidad.add(tmpListaMorosidad.get(i));
                        NumeroRegistrosLista++;

                    }


                }
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "CargarListadoMorosidadMensualAnualActualizado()\nError " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);

        }
    }
} //class


